#include <iostream>
#include <string>
#include <unistd.h>
#include <pthread.h>    

using namespace std;

// 定义一个全局锁
pthread_mutex_t lock;  
// 共享资源
int shared_count = 0;

void* threadrun(void* arg)
{  
    // 上锁以保护共享资源  
    pthread_mutex_lock(&lock);  
    // 访问和修改共享资源  
    shared_count++;  
    string name = static_cast<char *>(arg);
    cout << name << "   " << shared_count + 100 << endl;
    // 解锁以允许其他线程访问共享资源  
    pthread_mutex_unlock(&lock);   
    return nullptr;  
}  
  
int main() 
{  
    pthread_t threads[5];  
    // 动态初始化互斥锁  
    pthread_mutex_init(&lock, nullptr);
    // 下面是静态初始化互斥锁
    // lock = PTHREAD_MUTEX_INITIALIZER;

    // 创建多个线程来并发地访问和修改共享资源  
    for (int i = 0; i < 5; i++) 
    {  
        string name = "new thread-" + to_string(i + 1);
        pthread_create(&threads[i], nullptr, threadrun, (void*)name.c_str());
        sleep(1);
    }  
    // 等待所有线程完成  
    for (int i = 0; i < 5; i++)
    {  
        pthread_join(threads[i], nullptr);  
    }  
    // 销毁互斥锁  
    pthread_mutex_destroy(&lock);  
    cout << "main thread Final count: " << shared_count << endl;  
    return 0;  
}
